﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.Datos.ConexionBD.Tours;
using UricaoWeb.LogicaDeNegocios.Tours;

using UricaoWeb.LogicaDeNegocios.Seguridad_y_Roles;


namespace UricaoWeb.Presentacion
{
    /// <summary>
    /// Permite al usuario hacer consulta de la información de los diferentes Tours
    /// </summary>
    public partial class ConsultarTour : API_Seguridad_Principal
    {
        private Tour _tour;
        private TourMaster _vista;
        private TourLogica _controlador = new TourLogica();
        private string _paginaRedireccion = "API_tour_BuscarTour.aspx";
        private int _idTourRecibido;
        private string _alerta;

        /// <summary>
        /// Cargar una nueva página con la referencia de un tour
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            var master = Master as MasterPage;
            if (master != null)
            {
                master.actualizar_label();
            }
            base.validar_usuario();
           

            bool inicio = Inicio();
            if (inicio)
            {
                if (Session["idTour"] != null)
                {
                    _idTourRecibido = int.Parse(Session["idTour"].ToString());
                }
                else
                {
                    Response.Redirect(_paginaRedireccion);
                }

                if (!IsPostBack)
                {
                    _tour = new Tour();
                    LlenarDatos(_idTourRecibido);
                    CambiarEstadoDeCampos(false);
                }
            }
            else
            {
                Redireccion();
            }
        }


        /// <summary>
        /// Método de carga inicial para la validacion del usuario
        /// </summary>
        /// <returns>Booleano de inicializacion</returns>
        private bool Inicio()
        {
            Logica_Usuario usuario = (Logica_Usuario)Session["user"];
            bool parsed = false;

            if (usuario != null)
            {
               return true;

            }
            else
            {
                _paginaRedireccion = "API_Seguridad_Login_.aspx";
                Server.Transfer(_paginaRedireccion, false);
            }

            return parsed;
        }


        /// <summary>
        /// Cambia el mensaje del label de alerta
        /// </summary>
        private void MostrarAlerta()
        {
            alerta.Text = _alerta;
            alerta.Visible = true;
        }



        /// <summary>
        /// Se traen los datos de un Tour específico a mostrar al usuario según su consulta
        /// </summary>
        /// <param name="idTour">Identificador que permite diferenciar con que Tour se debe trabajar</param>
        private void LlenarDatos(int idTour)
        {
            _tour = ConsultarTourParametrizado(idTour);

            if (_tour != null)
            {
                nombre.Text = _tour.NombreTour;
                descripcion.Text = _tour.DescripcionTour;
                capacidad.Text = _tour.CapacidadTour.ToString();
                precio.Text = _tour.PrecioTour.ToString();
                if (_tour.ActivoTour)
                    activo.Text = " Activado";
                else
                    activo.Text = " Desactivado";

                _vista = (TourMaster)Master;

                ConsultarHorario(_tour.IdTour);
            }
        }

        /// <summary>
        /// Marca los días en pantalla que ya estaban almacenados en bd
        /// </summary>
        /// <param name="dias">Lista de días</param>
        private void LlenarDias(List<string> dias)
        {

            foreach (string item in dias)
            {
                switch (item)
                {
                    case "lunes":
                        lunes.Checked = true;
                        break;
                    case "martes":
                        martes.Checked = true;
                        break;
                    case "miercoles":
                        miercoles.Checked = true;
                        break;
                    case "jueves":
                        jueves.Checked = true;
                        break;
                    case "viernes":
                        viernes.Checked = true;
                        break;
                    case "sabado":
                        sabado.Checked = true;
                        break;
                    case "domingo":
                        domingo.Checked = true;
                        break;
                }
                
            }

            
        }

        /// <summary>
        /// Se habilita en interaz la información del tour a visualizar
        /// </summary>
        private void CambiarEstadoDeCampos(bool estado)
        {
            lunes.Enabled = estado;
            martes.Enabled = estado;
            miercoles.Enabled = estado;
            jueves.Enabled = estado;
            viernes.Enabled = estado;
            sabado.Enabled = estado;
            domingo.Enabled = estado;
            horainicio.Enabled = estado;
            horafin.Enabled = estado;
            capacidad.Enabled = estado;
            precio.Enabled = estado;
            nombre.Enabled = estado;
            descripcion.Enabled = estado;
            activo.Enabled = estado;
        }


        /// <summary>
        /// Consulta de los horarios de un Tour en específico y se vacia la misma en interfaz
        /// </summary>
        /// <param name="idTour">Identificador que permite diferenciar con que Tour se debe trabajar</param>
        private void ConsultarHorario(int idTour)
        {
            List<List<string>> itinerario = new List<List<string>>();
            try
            {
                itinerario = _controlador.ConsultarHorario(idTour);
                List<string> dias = itinerario[0];
                List<string> horas = itinerario[1];

                LlenarDias(dias);

                horainicio.Text = horas[0];
                horafin.Text = horas[1];
            }
            catch (Exception e)
            {
                _alerta = "No se ha podido encontrar itinerario para dicho tour ";
                MostrarAlerta();

            }
         
        }



        /// Método que devuelve un tour específico
        /// </summary>
        /// <param name="idTour">Id del tour</param>
        /// <returns>Tour especificado</returns>
        private Tour ConsultarTourParametrizado(int idTour)
        {
            List<Tour> lista = new List<Tour>();
            try
            {
                lista = _controlador.ConsultarTour(idTour);
                return lista[0];
            }
            catch (Exception e)
            {
                _alerta = "No existen tour(s) disponible(s) para el hotel ";
                MostrarAlerta();
            }
            return null;
        }




        /// <summary>
        /// Redireccionar a otra página
        /// </summary>
        private void Redireccion()
        {
            Response.Redirect(_paginaRedireccion);
        }

        /// <summary>
        /// Boton que permite regresar a la pantalla anterior consultarTour
        /// </summary>
        protected void Regresar(object sender, EventArgs e)
        {
            Redireccion();
        }

        //Boton continuar
        protected void Button3_Click(object sender, EventArgs e)
        {
            Redireccion();
        }

        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}